分享主軸
Session 是一種在 Server 端存儲用戶資料的機制,當用戶第一次訪問應用程式時,Server 會創建一個唯一的 Session ID ,並將其存儲在用戶的瀏覽器 Cookie 中,每次用戶發送請求時,瀏覽器會將這個 Session ID 發送回 Server,Server 根據這個 ID 來找到相應的 Session 資料狀態
Program.cs
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(20);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
...
app.UseSession();
...
Controller(設定 Session 與 取得 Session )
public class HomeController : Controller
{
public IActionResult Index()
{
// 設置 Session 值
HttpContext.Session.SetString("Test", "Hello World");
return View();
}
public IActionResult About()
{
// 獲取 Session 值
string sessionValue = HttpContext.Session.GetString("Test");
ViewBag.SessionValue = sessionValue;
return View();
}
}
非控制器地方使用到或是寫成共用,如下範例
public class SessionService
{
private readonly IHttpContextAccessor _httpContextAccessor;
public SessionService(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public void SetSessionValue(string key, string value)
{
_httpContextAccessor.HttpContext.Session.SetString(key, value);
}
public string GetSessionValue(string key)
{
return _httpContextAccessor.HttpContext.Session.GetString(key);
}
}
1. Cookie 設定
Cookie.HttpOnly:設置為 true 時,Cookie 只能通過 HTTP 請求,無法通過 JavaScript 訪問,這有助於防止跨站腳本攻擊(XSS)
Cookie.IsEssential:設置為 true 時,即使使用者未同意 Cookie 政策,這個 Cookie 也會被存儲
Cookie.Path:設置 Cookie 的路徑,默認為 /
Cookie.Domain:設置 Cookie 的域名,默認為當前域名
2. IdleTimeout
3. IOTimeout
參考文章
https://learn.microsoft.com/zh-tw/aspnet/core/fundamentals/app-state?view=aspnetcore-8.0
https://www.aspsnippets.com/Articles/4723/Net-Core-8-Using-Session-in-ASPNet-Core/